package com.quectel.pay.module.order.service;

import com.quectel.pay.module.order.dto.PayOrderRefundDto;
import com.quectel.pay.module.order.dto.request.InitOrderParams;
import com.quectel.pay.module.order.dto.response.NotifyCheckResult;
import com.quectel.pay.module.order.dto.response.OrderCreatedResponseDto;
import com.quectel.pay.module.order.dto.response.SendRefundResp;

import java.util.Map;

/**
 * 微信App支付相关
 *
 * @author: caolu
 * @email: louis.cao@quectel.com
 * @date: 2023-04-13 13:52:00
 */
public interface OrderWechatAppPayService {
    /**
     * 创建一个微信订单 并存入数据库
     *
     * @param initOrderParams
     * @return 没有成功返回null
     */
    OrderCreatedResponseDto createOrder(InitOrderParams initOrderParams);

    /**
     * 发起退款 成功代表发起成功，真正的退款成功是需要等待退款回调
     *
     * @param payChannelId
     * @param refundReq
     * @return
     */
    SendRefundResp sendRefundRequest(Long payChannelId, PayOrderRefundDto refundReq);

    /**
     * 支付完成回调
     *
     * @param payChannelId
     * @param allHeaders   v3验签需要
     * @param recStr       这个是request.getInputStream()转为String
     * @return
     */
    NotifyCheckResult payNotifyCheck(Long payChannelId, Map<String, String> allHeaders, String recStr);

    /**
     * 校验微信App退款回调 注意看：当你在看到这个文件夹的时候一定要读我
     *
     * @param payChannelId
     * @param allHeaders   v3验签需要
     * @param recStr       这个是request.getInputStream()转为String
     * @return
     */
    NotifyCheckResult refundNotifyCheck(Long payChannelId, Map<String, String> allHeaders, String recStr);
}
